"""
Created on 2024-04-25 12:21:02
---------
@summary: 爬虫入口
---------
@author: Alex
"""
from feapder import ArgumentParser
from spiders.amazon.amazon_spider_category import AmazonCategorySpider
from spiders.amazon.amazon_spider_detail import AmazonDetailSpider
from datetime import datetime


def crawl_category(args=1):
    """
    amazon榜单爬虫
    """
    task_table = "amazon_task_seeds_category"
    spider = AmazonCategorySpider(

        task_table=task_table,  # mysql中的任务表
        batch_record_table=f"{task_table}_record",  # mysql中的批次记录表
        batch_name=datetime.now().date(),  # 批次名字
        batch_interval=1,  # 批次时间 天为单位 若为小时 可写 1 / 24
        task_keys=["id", "cate_source", "url"],  # 需要获取任务表里的字段名，可添加多个
        redis_key="spider:amazon:category",  # redis中存放request等信息的根key
        task_state="state",  # mysql中任务状态字段
        save_to_db=True,
        SPIDER_MAX_RETRY_TIMES=1
    )
    # spider.start_monitor_task()
    if args == 1:
        spider.start_monitor_task()
    elif args == 2:
        spider.start()
#     elif args == 3:
#         spider.init_task()


def crawl_test():
    """
    BatchSpider爬虫
    """
    task_table = "amazon_task_seeds"
    # spider = AmazonDetailSpider.to_DebugBatchSpider(
    #     task_id=451,
    #     task_table=task_table,  # mysql中的任务表
    #     batch_record_table=f"{task_table}_record",  # mysql中的批次记录表
    #     batch_name=datetime.now().date(),  # 批次名字
    #     batch_interval=1,  # 批次时间 天为单位 若为小时 可写 1 / 24
    #     task_keys=["id", "asin","cid"],  # 需要获取任务表里的字段名，可添加多个
    #     redis_key="spider:amazon:detail",  # redis中存放request等信息的根key
    #     task_state="state",  # mysql中任务状态字段
    #     save_to_db=True,
    #     SPIDER_MAX_RETRY_TIMES=1,
    #     SAVE_FAILED_REQUEST=True
    # )
    spider = AmazonDetailSpider(
        # task_id=757,
        task_table=task_table,  # mysql中的任务表
        batch_record_table=f"{task_table}_record",  # mysql中的批次记录表
        batch_name=datetime.now().date(),  # 批次名字
        batch_interval=1,  # 批次时间 天为单位 若为小时 可写 1 / 24
        task_keys=["id", "asin", "cid"],  # 需要获取任务表里的字段名，可添加多个
        redis_key="spider:amazon:detail",  # redis中存放request等信息的根key
        task_state="state",  # mysql中任务状态字段
        SPIDER_MAX_RETRY_TIMES=1,
    )
    spider.start()


def crawl_detail(args=1):
    """
    BatchSpider爬虫
    """
    task_table = "amazon_task_seeds"
    spider = AmazonDetailSpider(
        task_table=task_table,  # mysql中的任务表
        batch_record_table=f"{task_table}_record",  # mysql中的批次记录表
        batch_name=datetime.now().date(),  # 批次名字
        batch_interval=1,  # 批次时间 天为单位 若为小时 可写 1 / 24
        task_keys=["id", "asin", "cid"],  # 需要获取任务表里的字段名，可添加多个
        redis_key="spider:amazon:detail",  # redis中存放request等信息的根key
        task_state="state",  # mysql中任务状态字段
    )

    if args == 1:
        spider.start_monitor_task()
    elif args == 2:
        spider.start()
#     elif args == 3:
#         spider.init_task()


if __name__ == "__main__":
    # crawl_category_test()
    # crawl_detail()
    parser = ArgumentParser(description="amazon 爬虫")

    parser.add_argument(
        "--crawl_test", action="store_true", help="amazon榜单爬虫", function=crawl_test
    )
    parser.add_argument(
        "--crawl-detail",
        type=int,
        nargs=1,
        help="amazon详情爬虫",
        choices=[1, 2],
        function=crawl_detail,
    )
    parser.add_argument(
        "--crawl-category",
        type=int,
        nargs=1,
        help="amazon详情爬虫",
        choices=[1, 2],
        function=crawl_category,
    )
    parser.start()